package auth_dao

import (
	"admin-system/internal/models/auth_model"
	"context"
	"gorm.io/gorm"
	"log/slog"
)

type RoleMenuDao struct {
	db *gorm.DB
}

func NewRoleMenuDao(db *gorm.DB) *RoleMenuDao {
	return &RoleMenuDao{
		db: db,
	}
}

// GetMenuListByRoleId 根据角色ID获取菜单列表
// @param roleId
// @return []auth_model.Menu
func (rm *RoleMenuDao) GetMenuListByRoleId(c context.Context, roleId int64) (roleMenu []auth_model.RoleMenu,
	err error) {
	if err = rm.db.WithContext(c).Select("menu_id").Where("role_id = ?", roleId).Find(&roleMenu).Error; err != nil {
		return nil, err
	}
	return roleMenu, nil
}

// GetRoleMenus 根据角色ID获取角色下的菜单
// @param roleId
func (rm *RoleMenuDao) GetRoleMenus(ctx context.Context, roleId int64) ([]auth_model.RoleMenu, error) {
	var roleMenus []auth_model.RoleMenu
	if err := rm.db.WithContext(ctx).Where("role_id = ?", roleId).Find(&roleMenus).Error; err != nil {
		slog.Any("查询角色下的菜单失败", err)
		return nil, err
	}
	return roleMenus, nil
}

// AssignMenuToRole 角色分配菜单
// @param roleId
// @param addMenuIds
// @param removeMenuIds
//func (rm *RoleMenuDao) AssignMenuToRole(ctx context.Context, roleId int64, addMenuIds, removeMenuIds []int64) error {
//	// 先执行删除角色下的菜单
//
//}
